#pragma once
#include <dinput.h>
#include "UserTypes.h"
using namespace System;
using namespace System::Collections::Generic;
using namespace Reign::Core;

namespace Reign
{namespace Input
{namespace DI
{
	public ref class Input : Disposable, InputI
	{
		#pragma region Fields
		private: IDirectInput8* device;
		internal: IntPtr handle;
		#pragma endregion

		#pragma region Properties
		internal: delegate void UpdateCallbackFunc();
		internal: UpdateCallbackFunc^ UpdateCallback;

		public: property IDirectInput8* Device {IDirectInput8* get();}
		#pragma endregion
		
		#pragma region Contructors
		public: Input(DisposableI^ parent, Window^ window);
		public: Input(DisposableI^ parent, IntPtr handle);
		private: void init(DisposableI^ parent, IntPtr handle);
		public: ~Input();
		private: void null();
		#pragma endregion
		
		#pragma region Methods
		public: virtual void Update();
		#pragma endregion
	};
}
}
}